package Q4;
/*
服 务 器接 收到 对象 后判 断 用户 对象 信息 是否 为 "admin" 和 "123456"，
若 是则 将 UserMessage 对象中的类型改为"success"，
否则将类型改为"fail"并回发给客户端，客户 端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
 */

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerSide {

    public static void main(String[] args) {

        //1. 创建ServerSocket类型的对象并提供服务器的端口号
        ServerSocket ss = null;
        Socket client_side = null;
        ObjectInputStream receive = null;
        ObjectOutputStream send = null;
        try {
            ss = new ServerSocket(6666);
            System.out.println("正在等待客户端连接.............");
            //2. 通过accept方法接收客户端的请求
            client_side = ss.accept();
            System.out.println("已有客户端正在连接.....。。。。。。");
            //3. 通过输入输出流，接收客户端发送信息并向客户端返回消息
            // 接收UserMessage对象并判断是否满足条件
            receive = new ObjectInputStream(client_side.getInputStream());
            //返回UserMessage对象
            send = new ObjectOutputStream(client_side.getOutputStream());
            while (true){
                UserMassage message = (UserMassage) receive.readObject();
                System.out.println("已经接收到客户端发来的信息："+ message);
                if(message.getClient().getName().equals("admin")&& message.getClient().getPassword().equals("123456")) {
                System.out.println("登录用户admin");
                message.setType("success");
            }
            send.writeObject(message);
                if (message.getType().equals("success")){
                    System.out.println("客户端已下线.......");
                    break;
                }
                System.out.println("已向客户端发送返回对象：" + message);
            }

//            send = new ObjectOutputStream(client_side.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally{

            if(null != send){
                try {
                    send.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != receive){
                try {
                    receive.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //关闭客户端的接收
            if(null != client_side){
                try {
                    client_side.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //关闭服务器
            if(null != ss){
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
